//package com.example.week07.config;
//
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.annotation.After;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Before;
//import org.aspectj.lang.annotation.Pointcut;
//import org.springframework.core.annotation.Order;
//import org.springframework.stereotype.Component;
//
//@Aspect
//@Slf4j
//@Order(1) // 数据源的切换要在数据库事务之前, 设置AOP执行顺序(需要在事务之前，否则事务只发生在默认库中, 数值越小等级越高)
//@Component
//public class DataSourceAspect {
//
//    // 切点, 注意这里是在service层（具体是配置dao层还是service层需要看自己业务，原则就是当前业务需要在主库执行还是从库执行的判断依据在哪）
//    @Pointcut("execution(* com.example.week07.service.impl..*.*(..)))")
//    public void aspect() {
//    }
//
//    @Before("aspect()")
//    private void before(JoinPoint point) {
//        //进入切面
//        String method = point.getSignature().getName();//当前切入的方法名
//        //	point.getSignature().getDeclaringType().getName();//当前切入的class
//
//        // 根据自己业务做判断主库从库切换
//        if (method.startsWith("query") || method.startsWith("select") || method.startsWith("get")
//                || method.startsWith("find") || method.startsWith("read")) {
//            // 设置为当前使用从库
//            DataSourceRouter.setSlave();
//        } else {
//            // 设置为当前使用主库
//            DataSourceRouter.setMater();
//        }
//    }
//
//    // 切面结束, 重置线程变量 ，
//    @After("aspect()")
//    public void after(JoinPoint joinPoint) {
//        //切面结束
//    }
//
//}
//
